package design_principles.singleton_pattern.code;
/**
 * 枚举式单例模式 (见书籍 Spring_5核心原理与30个类手写实战)
 * 反编译：枚举式单例模式在静态代码块中就给INSTANCE进行了赋 值，是饿汉式单例模式的实现
 * static{
 * 
 * }
 * 说明：枚举单例模式不存在 反射和序列化破坏单例
 * 1.序列化：枚举类型其实通过类名和类对象类找到一个唯一的枚举对象。因此，枚举对象不可能被类加载器加载多次
 * 2.反射：Constructor的newInstance 进行了强制判断，如果是枚举类会直接报错 Cannot reflectively create enum objects
 */
public enum EnumSingleton {
    INSTANCE;
    private Object data;
    public Object getData(){
        return data;
    }
    public void setData(Object data){
        this.data=data;
    }
    public static EnumSingleton getInstance(){
        return INSTANCE;
    }
}